From: jenkins-bot Date: Thu, 15 Feb 2018 02:14:07 +0000 (+0000) Subject: Merge "Hard-deprecate ParserOutput stateful transform methods" X-Git-Tag: 1.31.0-rc.0~604 X-Git-Url: http://git.cyclocoop.org/%22.%24info%5B?a=commitdiff_plain;h=fc0b2a62ccfe5cc6209f3182785e2821c1c54de1;hp=595a108b36b0ee96e0a9b6719024670362b7a839;p=lhc%2Fweb%2Fwiklou.git Merge "Hard-deprecate ParserOutput stateful transform methods" --- diff --git a/includes/EditPage.php b/includes/EditPage.php index 6fbeed7b4d..cdf2106cba 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -4028,7 +4028,6 @@ ERROR; $this->mTitle, $pstContent, $user ); $parserOutput = $pstContent->getParserOutput( $this->mTitle, null, $parserOptions ); ScopedCallback::consume( $scopedCallback ); - $parserOutput->setEditSectionTokens( false ); // no section edit links return [ 'parserOutput' => $parserOutput, 'html' => $parserOutput->getText( [ diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 01b450b457..f95327a72b 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -287,11 +287,6 @@ class OutputPage extends ContextSource { */ private $mEnableTOC = false; - /** - * @var bool Whether parser output should contain section edit links - */ - private $mEnableSectionEditLinks = true; - /** * @var string|null The URL to send in a element with rel=license */ @@ -1547,7 +1542,6 @@ class OutputPage extends ContextSource { // Someone is trying to set a bogus pre-$wgUser PO. Check if it has // been changed somehow, and keep it if so. $anonPO = ParserOptions::newFromAnon(); - $anonPO->setEditSection( false ); $anonPO->setAllowUnsafeRawHtml( false ); if ( !$options->matches( $anonPO ) ) { wfLogWarning( __METHOD__ . ': Setting a changed bogus ParserOptions: ' . wfGetAllCallers( 5 ) ); @@ -1561,7 +1555,6 @@ class OutputPage extends ContextSource { // ParserOptions for it. And don't cache this ParserOptions // either. $po = ParserOptions::newFromAnon(); - $po->setEditSection( false ); $po->setAllowUnsafeRawHtml( false ); $po->isBogus = true; if ( $options !== null ) { @@ -1571,7 +1564,6 @@ class OutputPage extends ContextSource { } $this->mParserOptions = ParserOptions::newFromContext( $this->getContext() ); - $this->mParserOptions->setEditSection( false ); $this->mParserOptions->setAllowUnsafeRawHtml( false ); } @@ -1821,7 +1813,7 @@ class OutputPage extends ContextSource { // so that extensions may modify ParserOutput to toggle TOC. // This cannot be moved to addParserOutputText because that is not // called by EditPage for Preview. - if ( $parserOutput->getTOCEnabled() && $parserOutput->getTOCHTML() ) { + if ( $parserOutput->getTOCHTML() ) { $this->mEnableTOC = true; } } @@ -1867,17 +1859,6 @@ class OutputPage extends ContextSource { */ function addParserOutput( $parserOutput, $poOptions = [] ) { $this->addParserOutputMetadata( $parserOutput ); - - // Touch section edit links only if not previously disabled - if ( $parserOutput->getEditSectionTokens() ) { - $parserOutput->setEditSectionTokens( $this->mEnableSectionEditLinks ); - } - if ( !$this->mEnableSectionEditLinks - && !array_key_exists( 'enableSectionEditLinks', $poOptions ) - ) { - $poOptions['enableSectionEditLinks'] = false; - } - $this->addParserOutputText( $parserOutput, $poOptions ); } @@ -3895,7 +3876,7 @@ class OutputPage extends ContextSource { * @deprecated since 1.31, use $poOptions to addParserOutput() instead. */ public function enableSectionEditLinks( $flag = true ) { - $this->mEnableSectionEditLinks = $flag; + wfDeprecated( __METHOD__, '1.31' ); } /** @@ -3904,7 +3885,8 @@ class OutputPage extends ContextSource { * @deprecated since 1.31, use $poOptions to addParserOutput() instead. */ public function sectionEditLinksEnabled() { - return $this->mEnableSectionEditLinks; + wfDeprecated( __METHOD__, '1.31' ); + return true; } /** diff --git a/includes/api/ApiParse.php b/includes/api/ApiParse.php index 3326fab5e4..cbd62a97df 100644 --- a/includes/api/ApiParse.php +++ b/includes/api/ApiParse.php @@ -536,7 +536,6 @@ class ApiParse extends ApiBase { $popts->enableLimitReport( !$params['disablepp'] && !$params['disablelimitreport'] ); $popts->setIsPreview( $params['preview'] || $params['sectionpreview'] ); $popts->setIsSectionPreview( $params['sectionpreview'] ); - $popts->setEditSection( !$params['disableeditsection'] ); if ( $params['disabletidy'] ) { $popts->setTidy( false ); } diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 63c03af25b..d5ff6cbc9a 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -191,13 +191,11 @@ class MessageCache { // ParserOptions for it. And don't cache this ParserOptions // either. $po = ParserOptions::newFromAnon(); - $po->setEditSection( false ); $po->setAllowUnsafeRawHtml( false ); return $po; } $this->mParserOptions = new ParserOptions; - $this->mParserOptions->setEditSection( false ); // Messages may take parameters that could come // from malicious sources. As a precaution, disable // the parser tag when parsing messages. diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index e76bffcace..fa30d68655 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -658,11 +658,6 @@ class DifferenceEngine extends ContextSource { */ protected function getParserOutput( WikiPage $page, Revision $rev ) { $parserOptions = $page->makeParserOptions( $this->getContext() ); - - if ( !$rev->isCurrent() || !$rev->getTitle()->quickUserCan( 'edit', $this->getUser() ) ) { - $parserOptions->setEditSection( false ); - } - $parserOutput = $page->getParserOutput( $parserOptions, $rev->getId() ); return $parserOutput; diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index dbd143c8e4..f5e12d6477 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -445,7 +445,6 @@ abstract class Installer { $this->parserTitle = Title::newFromText( 'Installer' ); $this->parserOptions = new ParserOptions( $wgUser ); // language will be wrong :( - $this->parserOptions->setEditSection( false ); // Don't try to access DB before user language is initialised $this->setParserLanguage( Language::factory( 'en' ) ); } diff --git a/includes/page/Article.php b/includes/page/Article.php index 343c4c8d6f..8eb3709b53 100644 --- a/includes/page/Article.php +++ b/includes/page/Article.php @@ -480,12 +480,10 @@ class Article implements Page { # Render printable version, use printable version cache if ( $outputPage->isPrintable() ) { $parserOptions->setIsPrintable( true ); - $parserOptions->setEditSection( false ); $poOptions['enableSectionEditLinks'] = false; } elseif ( $this->disableSectionEditForRender || !$this->isCurrent() || !$this->getTitle()->quickUserCan( 'edit', $user ) ) { - $parserOptions->setEditSection( false ); $poOptions['enableSectionEditLinks'] = false; } @@ -1526,7 +1524,6 @@ class Article implements Page { public function render() { $this->getContext()->getRequest()->response()->header( 'X-Robots-Tag: noindex' ); $this->getContext()->getOutput()->setArticleBodyOnly( true ); - $this->getContext()->getOutput()->enableSectionEditLinks( false ); $this->disableSectionEditForRender = true; $this->view(); } diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index b2d8511de8..2adfd0a5d2 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -4032,13 +4032,9 @@ class Parser { # Inhibit editsection links if requested in the page if ( isset( $this->mDoubleUnderscores['noeditsection'] ) ) { - $maybeShowEditLink = $showEditLink = false; + $maybeShowEditLink = false; } else { - $maybeShowEditLink = true; /* Actual presence will depend on ParserOptions option */ - $showEditLink = $this->mOptions->getEditSection(); - } - if ( $showEditLink ) { - $this->mOutput->setEditSectionTokens( true ); + $maybeShowEditLink = true; /* Actual presence will depend on post-cache transforms */ } # Get all headlines for numbering them and adding funky stuff like [edit] @@ -4390,9 +4386,9 @@ class Parser { * $this : caller * $section : the section number * &$sectionContent : ref to the content of the section - * $showEditLinks : boolean describing whether this section has an edit link + * $maybeShowEditLinks : boolean describing whether this section has an edit link */ - Hooks::run( 'ParserSectionCreate', [ $this, $i, &$sections[$i], $showEditLink ] ); + Hooks::run( 'ParserSectionCreate', [ $this, $i, &$sections[$i], $maybeShowEditLink ] ); $i++; } diff --git a/includes/parser/ParserCache.php b/includes/parser/ParserCache.php index c680129934..8a7fca6c29 100644 --- a/includes/parser/ParserCache.php +++ b/includes/parser/ParserCache.php @@ -253,11 +253,6 @@ class ParserCache { wfDebug( "ParserOutput cache found.\n" ); - // The edit section preference may not be the appropiate one in - // the ParserOutput, as we are not storing it in the parsercache - // key. Force it here. See T33445. - $value->setEditSectionTokens( $popts->getEditSection() ); - $wikiPage = method_exists( $article, 'getPage' ) ? $article->getPage() : $article; diff --git a/includes/parser/ParserOptions.php b/includes/parser/ParserOptions.php index ca8e739f9a..bbddbe2809 100644 --- a/includes/parser/ParserOptions.php +++ b/includes/parser/ParserOptions.php @@ -80,13 +80,6 @@ class ParserOptions { */ private $mTimestamp; - /** - * The edit section flag is in ParserOptions for historical reasons, but - * doesn't actually affect the parser output since Feb 2015. - * @var bool - */ - private $mEditSection = true; - /** * Stored user object * @var User @@ -876,7 +869,8 @@ class ParserOptions { * @return bool */ public function getEditSection() { - return $this->mEditSection; + wfDeprecated( __METHOD__, '1.31' ); + return true; } /** @@ -886,7 +880,8 @@ class ParserOptions { * @return bool Old value */ public function setEditSection( $x ) { - return wfSetVar( $this->mEditSection, $x ); + wfDeprecated( __METHOD__, '1.31' ); + return true; } /** @@ -1284,18 +1279,6 @@ class ParserOptions { $defaults = self::getCanonicalOverrides() + self::getDefaults(); $inCacheKey = self::$inCacheKey; - // Historical hack: 'editsection' hasn't been a true parser option since - // Feb 2015 (instead the parser outputs a constant placeholder and post-parse - // processing handles the option). But Wikibase forces it in $forOptions - // and expects the cache key to still vary on it for T85252. - // @deprecated since 1.30, Wikibase should use addExtraKey() or something instead. - if ( in_array( 'editsection', $forOptions, true ) ) { - $options['editsection'] = $this->mEditSection; - $defaults['editsection'] = true; - $inCacheKey['editsection'] = true; - ksort( $inCacheKey ); - } - // We only include used options with non-canonical values in the key // so adding a new option doesn't invalidate the entire parser cache. // The drawback to this is that changing the default value of an option diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php index 19375e0c21..8f0a1d7cc9 100644 --- a/includes/parser/ParserOutput.php +++ b/includes/parser/ParserOutput.php @@ -151,12 +151,6 @@ class ParserOutput extends CacheTime { */ public $mSections = []; - /** - * @deprecated since 1.31 Use getText() options. - * @var bool $mEditSectionTokens prefix/suffix markers if edit sections were output as tokens. - */ - public $mEditSectionTokens = true; - /** * @var array $mProperties Name/value pairs to be cached in the DB. */ @@ -172,12 +166,6 @@ class ParserOutput extends CacheTime { */ public $mTimestamp; - /** - * @deprecated since 1.31 Use getText() options. - * @var bool $mTOCEnabled Whether TOC should be shown, can't override __NOTOC__. - */ - public $mTOCEnabled = true; - /** * @var bool $mEnableOOUI Whether OOUI should be enabled. */ @@ -280,22 +268,9 @@ class ParserOutput extends CacheTime { * @return string HTML */ public function getText( $options = [] ) { - if ( !array_key_exists( 'allowTOC', $options ) && empty( $this->mTOCEnabled ) ) { - wfDeprecated( 'ParserOutput stateful allowTOC', '1.31' ); - } - - // Note that while $this->mEditSectionTokens formerly defaulted to false, - // ParserOptions->getEditSection() defaults to true and Parser copies - // that to us so true makes more sense as the stateless default. - if ( !array_key_exists( 'enableSectionEditLinks', $options ) && !$this->mEditSectionTokens ) { - wfDeprecated( 'ParserOutput stateful enableSectionEditLinks', '1.31' ); - } - $options += [ - // empty() here because old cached versions might lack the field somehow. - // In that situation, the historical behavior (possibly buggy) is to remove the TOC. - 'allowTOC' => !empty( $this->mTOCEnabled ), - 'enableSectionEditLinks' => $this->mEditSectionTokens, + 'allowTOC' => true, + 'enableSectionEditLinks' => true, 'unwrap' => false, 'deduplicateStyles' => true, ]; @@ -442,7 +417,8 @@ class ParserOutput extends CacheTime { * @deprecated since 1.31 Use getText() options. */ public function getEditSectionTokens() { - return $this->mEditSectionTokens; + wfDeprecated( __METHOD__, '1.31' ); + return true; } public function &getLinks() { @@ -532,7 +508,8 @@ class ParserOutput extends CacheTime { * @deprecated since 1.31 Use getText() options. */ public function getTOCEnabled() { - return $this->mTOCEnabled; + wfDeprecated( __METHOD__, '1.31' ); + return true; } public function getEnableOOUI() { @@ -563,7 +540,8 @@ class ParserOutput extends CacheTime { * @deprecated since 1.31 Use getText() options. */ public function setEditSectionTokens( $t ) { - return wfSetVar( $this->mEditSectionTokens, $t ); + wfDeprecated( __METHOD__, '1.31' ); + return true; } public function setIndexPolicy( $policy ) { @@ -582,7 +560,8 @@ class ParserOutput extends CacheTime { * @deprecated since 1.31 Use getText() options. */ public function setTOCEnabled( $flag ) { - return wfSetVar( $this->mTOCEnabled, $flag ); + wfDeprecated( __METHOD__, '1.31' ); + return true; } public function addCategory( $c, $sort ) { diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index f821effdf0..127a36ba3c 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -450,9 +450,7 @@ class SpecialUndelete extends SpecialPage { if ( ( $this->mPreview || !$isText ) && $content ) { // NOTE: non-text content has no source view, so always use rendered preview - // Hide [edit]s $popts = $out->parserOptions(); - $popts->setEditSection( false ); $pout = $content->getParserOutput( $this->mTargetObj, $rev->getId(), $popts, true ); $out->addParserOutput( $pout, [ diff --git a/tests/phpunit/includes/parser/ParserOptionsTest.php b/tests/phpunit/includes/parser/ParserOptionsTest.php index d55372c61f..e2ed1d57e0 100644 --- a/tests/phpunit/includes/parser/ParserOptionsTest.php +++ b/tests/phpunit/includes/parser/ParserOptionsTest.php @@ -141,23 +141,6 @@ class ParserOptionsTest extends MediaWikiTestCase { $confstr .= '!onPageRenderingHash'; } - // Test weird historical behavior is still weird - public function testOptionsHashEditSection() { - $popt = ParserOptions::newCanonical(); - $popt->registerWatcher( function ( $name ) { - $this->assertNotEquals( 'editsection', $name ); - } ); - - $this->assertTrue( $popt->getEditSection() ); - $this->assertSame( 'canonical', $popt->optionsHash( [] ) ); - $this->assertSame( 'canonical', $popt->optionsHash( [ 'editsection' ] ) ); - - $popt->setEditSection( false ); - $this->assertFalse( $popt->getEditSection() ); - $this->assertSame( 'canonical', $popt->optionsHash( [] ) ); - $this->assertSame( 'editsection=0', $popt->optionsHash( [ 'editsection' ] ) ); - } - /** * @expectedException InvalidArgumentException * @expectedExceptionMessage Unknown parser option bogus diff --git a/tests/phpunit/includes/parser/ParserOutputTest.php b/tests/phpunit/includes/parser/ParserOutputTest.php index 44c1773adb..b08ba6c484 100644 --- a/tests/phpunit/includes/parser/ParserOutputTest.php +++ b/tests/phpunit/includes/parser/ParserOutputTest.php @@ -1,7 +1,5 @@ setMwGlobals( [ 'wgArticlePath' => '/wiki/$1', 'wgScriptPath' => '/w', 'wgScript' => '/w/index.php', ] ); - $this->hideDeprecated( 'ParserOutput stateful allowTOC' ); - $this->hideDeprecated( 'ParserOutput stateful enableSectionEditLinks' ); $po = new ParserOutput( $text ); - - // Emulate Parser - $po->setEditSectionTokens( true ); - - if ( $poState ) { - $wrap = TestingAccessWrapper::newFromObject( $po ); - foreach ( $poState as $key => $value ) { - $wrap->$key = $value; - } - } - $actual = $po->getText( $options ); $this->assertSame( $expect, $actual ); } @@ -169,89 +153,8 @@ EOF; EOF; return [ - 'No stateless options, default state' => [ - [], [], $text, <<

Test document. -

- - -

Section 1[edit]

-

One -

-

Section 2[edit]

-

Two -

-

Section 2.1[edit]

-

Two point one -

-

Section 3[edit]

-

Three -

-EOF - ], - 'No stateless options, TOC statefully disabled' => [ - [], [ 'mTOCEnabled' => false ], $text, <<

Test document. -

- -

Section 1[edit]

-

One -

-

Section 2[edit]

-

Two -

-

Section 2.1[edit]

-

Two point one -

-

Section 3[edit]

-

Three -

-EOF - ], - 'No stateless options, section edits statefully disabled' => [ - [], [ 'mEditSectionTokens' => false ], $text, <<

Test document. -

- - -

Section 1

-

One -

-

Section 2

-

Two -

-

Section 2.1

-

Two point one -

-

Section 3

-

Three -

-EOF - ], - 'Stateless options override stateful settings' => [ - [ 'allowTOC' => true, 'enableSectionEditLinks' => true ], - [ 'mTOCEnabled' => false, 'mEditSectionTokens' => false ], - $text, << [ + [], $text, <<

Test document.

Contents

@@ -280,8 +183,8 @@ EOF

EOF ], - 'Statelessly disable section edit links' => [ - [ 'enableSectionEditLinks' => false ], [], $text, << [ + [ 'enableSectionEditLinks' => false ], $text, <<

Test document.

Contents

@@ -310,8 +213,8 @@ EOF

EOF ], - 'Statelessly disable TOC' => [ - [ 'allowTOC' => false ], [], $text, << [ + [ 'allowTOC' => false ], $text, <<

Test document.

@@ -329,8 +232,8 @@ EOF

EOF ], - 'Statelessly unwrap text' => [ - [ 'unwrap' => true ], [], $text, << [ + [ 'unwrap' => true ], $text, <<Test document.

Contents

@@ -360,15 +263,15 @@ EOF EOF ], 'Unwrap without a mw-parser-output wrapper' => [ - [ 'unwrap' => true ], [], '
Content
', '
Content
' + [ 'unwrap' => true ], '
Content
', '
Content
' ], 'Unwrap with extra comment at end' => [ - [ 'unwrap' => true ], [], '

Test document.

+ [ 'unwrap' => true ], '

Test document.

', '

Test document.

' ], 'Style deduplication' => [ - [], [], $dedupText, <<This is a test document.

@@ -382,7 +285,7 @@ EOF EOF ], 'Style deduplication disabled' => [ - [ 'deduplicateStyles' => false ], [], $dedupText, $dedupText + [ 'deduplicateStyles' => false ], $dedupText, $dedupText ], ]; // phpcs:enable